package com.browsesoft.adapter;

import java.util.LinkedList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.browsesoft.EntityManager;
import com.browsesoft.ExtendElement;
import com.browsesoft.htmlcomponent.HTMLBasicComponent;
import com.browsesoft.htmlcomponent.HTMLTableModel;
import com.browsesoft.resource.BasicResource;
import com.browsesoft.user.Role;
import com.browsesoft.user.User;

/**
 * 组下的所有用户列表
 */
public class AllUserTableModel implements HTMLTableModel {
	/**
	 * 所有用户列表
	 */
	private LinkedList users = new LinkedList();

	// 组ID
	private String parentid = "";

	/**
	 * 初始化model
	 * 
	 * @param request
	 *            请求
	 * @throws Exception
	 */
	public void init(HttpServletRequest request) throws Exception {
	}

	/**
	 * 得到列数
	 * 
	 * @return 列数
	 */
	public int getColumnCount() {
		return 2;
	}

	/**
	 * 得到列的名称
	 * 
	 * @param index
	 *            列号
	 * @return 列的名称
	 */
	public String getColumnName(int index) {
		String[] types = { "用户名", "" };
		return types[index];
	}

	/**
	 * 得到列的英文名
	 * 
	 * @param index
	 *            列号
	 * @return 列的英文名
	 */
	public String getColumnEname(int index) {
		return "";
	}

	public Object getDatas() {
		return null;
	}

	/**
	 * 得到行数
	 * 
	 * @return 行数
	 */
	public int getRowCount() {
		if (users != null) {
			return users.size();
		} else {
			return 0;
		}
	}

	/**
	 * 设置传递的参数
	 * 
	 * @param request
	 *            请求
	 * @param response
	 *            响应
	 * @throws Exception
	 */
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		this.parentid = request.getParameter("id");
		// 取得组所属下ou的所有用户,(不包括注销用户)
		Role role = (Role) EntityManager.getInstance().getObject(parentid);
		BasicResource res = (BasicResource) role.getParent();
		users = res.getChildrenByType("user");
		users.addAll(res.getChildrenByType("outuser"));
		// 取出祖的用户
		users.removeAll(role.getUsers());
	}

	/**
	 * 得到某列的操作类型
	 * 
	 * @param col
	 *            列号
	 * @return 类型
	 */
	public String getType(int col) {
		String[] types = { "td", "checkbox" };
		return types[col];
	}

	/**
	 * 修改单元值
	 * 
	 * @param td
	 *            元素
	 * @param doc
	 *            doc
	 * @param row
	 *            row
	 * @param col
	 *            col
	 */
	public void modifyCellValue(Element td, Document doc, int row, int col) {
		try {
			User user = (User) users.get(row);
			// 用户名称
			if (col == 0) {
				ExtendElement.replaceElementContext(td, doc
						.createTextNode(EntityManager.getValue(user, "name")));
			} else if (col == 1) {
				Element e = (Element) ExtendElement.findElements(td, "type",
						"checkbox").get(0);
				e.setAttribute("name", user.getID());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 设置模型所对应的组件
	 * 
	 * @param component
	 *            对应的组件
	 */
	public void setComponent(HTMLBasicComponent component) {
	}

	/**
	 * 模型更新页面元素
	 * 
	 * @param c
	 *            基本组件
	 * @throws Exception
	 */
	public void updatePageElement(HTMLBasicComponent c) throws Exception {
	}

	public void setCondition(String string) {
	}
}